package com.deer.wms.base.system.service;

import com.deer.wms.base.system.model.Item.ItemInfo;
import com.deer.wms.base.system.model.Item.ItemInfoCriteria;
import com.deer.wms.base.system.model.Item.ItemInfoDto;
import com.deer.wms.busine.tactic.model.Batch.BatchTacticDetail;
import com.deer.wms.busine.tactic.model.QC.QcTacticDetail;
import com.deer.wms.busine.tactic.model.Upper.UpperTacticDetailDto;
import com.deer.wms.intercept.common.data.CurrentUser;
import com.deer.wms.project.root.service.SuperService;

import java.util.List;
import java.util.Map;


/**
 *
 * @author guo
 * @since 2019/11/19
 */
public interface ItemInfoService extends SuperService<ItemInfo> {

    /**
     * 按照条件查询
     * @param criteria criteria
     * @return List<ItemInfoDto>
     */
    List<ItemInfoDto> findList(ItemInfoCriteria criteria);

    /**
     * 按照物料名称查询
     * @param itemName 物料名称
     * @return List<ItemInfo>
     */
    List<ItemInfo> findByName(String itemName);

    /**
     * 按照物料编码查询
     * @param itemCode 物料编码
     * @return List<ItemInfo>
     */
    List<ItemInfo> findByCode(String itemCode);

    /**
     * 按照物料类型查询
     * @param itemTypeId 物料类型ID
     * @return List<ItemInfoDto>
     */
    List<ItemInfoDto> itemInfoFindByItemTypeId(Integer itemTypeId);

    /**
     * 删除
     * @param itemCode 物料编码
     */
    void deleteByCode(String itemCode);

    /**
     *
     * @param itemCode
     * @return
     */
    String findBatchTacticCode(String itemCode);

    List<BatchTacticDetail> findBatchTacticDetails(String itemCode);

    /**
     * 根据物料编码查询上架策略
     * @param itemCode 物料编码
     * @return List<UpperTacticDetail>
     */
    List<UpperTacticDetailDto> findUpperTacticDetails(String itemCode);

    /**
     * 查询质检策略明细
     * @param itemCode 物料编码
     * @return List<QcTacticDetail>
     */
    List<QcTacticDetail> findQcTacticDetails(String itemCode);

    /**
     * 修改物料状态
     * @param itemCode 物料编码
     * @param sate 状态
     * @param currentUser 当前用户
     */
    void modifyItemState(String itemCode, String sate, CurrentUser currentUser);

    /**
     * 查询
     * @param field 字段名
     * @param value 值
     * @return ItemInfo
     */
    ItemInfo findBy(String field, String value);

    long findCount(ItemInfoCriteria criteria);

    /**
     * 添加物料
     */
    void saveItemList(Map<String,Object> hashMap);

}
